using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Export Mosaic Dataset Items</para>
    /// <para>Saves a copy of processed images within a mosaic dataset to a specified folder and raster file format.</para>
    /// <para>将镶嵌数据集中已处理图像的副本保存为指定的文件夹和栅格文件格式。</para>
    /// </summary>    
    [DisplayName("Export Mosaic Dataset Items")]
    public class ExportMosaicDatasetItems : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportMosaicDatasetItems()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset that contains the images you want to export.</para>
        /// <para>包含要导出的图像的镶嵌数据集。</para>
        /// </param>
        /// <param name="_out_folder">
        /// <para>Output Folder</para>
        /// <para>The folder where you want to save your images.</para>
        /// <para>要保存图像的文件夹。</para>
        /// </param>
        public ExportMosaicDatasetItems(object _in_mosaic_dataset, object _out_folder)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._out_folder = _out_folder;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Export Mosaic Dataset Items";

        public override string CallName => "management.ExportMosaicDatasetItems";

        public override List<string> AcceptEnvironments => ["compression", "geographicTransformations", "nodata", "outputCoordinateSystem", "parallelProcessingFactor", "pyramid", "rasterStatistics", "resamplingMethod", "snapRaster", "tileSize"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _out_folder, _out_base_name, _where_clause, _format.GetGPValue(), _nodata_value, _clip_type.GetGPValue(), _template_dataset, _cell_size, _derived_out_folder];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset that contains the images you want to export.</para>
        /// <para>包含要导出的图像的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Output Folder</para>
        /// <para>The folder where you want to save your images.</para>
        /// <para>要保存图像的文件夹。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Folder")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_folder { get; set; }


        /// <summary>
        /// <para>Output Base Name</para>
        /// <para><xdoc>
        ///   <para>A prefix to name each item after it is copied. The prefix will be followed by the Object ID from the mosaic dataset footprints table.</para>
        ///   <para>If no base name is set, the text in the Name field of the mosaic dataset item will be used.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于在复制后为每个项目命名的前缀。前缀后跟镶嵌数据集轮廓线表中的对象 ID。</para>
        ///   <para>如果未设置基名称，则将使用镶嵌数据集项的名称字段中的文本。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Base Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_base_name { get; set; } = null;


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL expression to save selected images in the mosaic dataset.</para>
        /// <para>用于将所选图像保存在镶嵌数据集中的 SQL 表达式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Output Format</para>
        /// <para><xdoc>
        ///   <para>Specifies the format for the output raster datasets.</para>
        ///   <bulletList>
        ///     <bullet_item>TIFF—TIFF format. This is the default.</bullet_item><para/>
        ///     <bullet_item>Cloud Optimized GeoTIFF—Cloud Optimized GeoTIFF format.</bullet_item><para/>
        ///     <bullet_item>BMP—BMP format.</bullet_item><para/>
        ///     <bullet_item>ENVI DAT—ENVI DAT format.</bullet_item><para/>
        ///     <bullet_item>Esri BIL—Esri BIL format.</bullet_item><para/>
        ///     <bullet_item>Esri BIP—Esri BIP format.</bullet_item><para/>
        ///     <bullet_item>Esri BSQ—Esri BSQ format.</bullet_item><para/>
        ///     <bullet_item>GIF—GIF format.</bullet_item><para/>
        ///     <bullet_item>Esri Grid—Esri Grid format.</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE—ERDAS IMAGINE format.</bullet_item><para/>
        ///     <bullet_item>JPEG 2000—JPEG 2000 format.</bullet_item><para/>
        ///     <bullet_item>JPEG—JPEG format.</bullet_item><para/>
        ///     <bullet_item>PNG—PNG format.</bullet_item><para/>
        ///     <bullet_item>Cloud raster format—Cloud raster format.</bullet_item><para/>
        ///     <bullet_item>Meta raster format—Meta raster format.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出栅格数据集的格式。</para>
        ///   <bulletList>
        ///     <bullet_item>TIFF - TIFF 格式。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>云优化 GeoTIFF - 云优化 GeoTIFF 格式。</bullet_item><para/>
        ///     <bullet_item>BMP - BMP 格式。</bullet_item><para/>
        ///     <bullet_item>ENVI DAT - ENVI DAT 格式。</bullet_item><para/>
        ///     <bullet_item>Esri BIL - Esri BIL 格式。</bullet_item><para/>
        ///     <bullet_item>Esri BIP - Esri BIP 格式。</bullet_item><para/>
        ///     <bullet_item>Esri BSQ - Esri BSQ 格式。</bullet_item><para/>
        ///     <bullet_item>GIF - GIF 格式。</bullet_item><para/>
        ///     <bullet_item>Esri Grid - Esri Grid 格式。</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE - ERDAS IMAGINE 格式。</bullet_item><para/>
        ///     <bullet_item>JPEG 2000 - JPEG 2000 格式。</bullet_item><para/>
        ///     <bullet_item>JPEG - JPEG 格式。</bullet_item><para/>
        ///     <bullet_item>PNG - PNG 格式。</bullet_item><para/>
        ///     <bullet_item>云栅格格式 - 云栅格格式。</bullet_item><para/>
        ///     <bullet_item>元栅格格式 - 元栅格格式。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Format")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _format_value _format { get; set; } = _format_value._TIFF;

        public enum _format_value
        {
            /// <summary>
            /// <para>TIFF</para>
            /// <para>TIFF—TIFF format. This is the default.</para>
            /// <para>TIFF - TIFF 格式。这是默认设置。</para>
            /// </summary>
            [Description("TIFF")]
            [GPEnumValue("TIFF")]
            _TIFF,

            /// <summary>
            /// <para>Cloud Optimized GeoTIFF</para>
            /// <para>Cloud Optimized GeoTIFF—Cloud Optimized GeoTIFF format.</para>
            /// <para>云优化 GeoTIFF - 云优化 GeoTIFF 格式。</para>
            /// </summary>
            [Description("Cloud Optimized GeoTIFF")]
            [GPEnumValue("Cloud Optimized GeoTIFF")]
            _Cloud_Optimized_GeoTIFF,

            /// <summary>
            /// <para>BMP</para>
            /// <para>BMP—BMP format.</para>
            /// <para>BMP - BMP 格式。</para>
            /// </summary>
            [Description("BMP")]
            [GPEnumValue("BMP")]
            _BMP,

            /// <summary>
            /// <para>ENVI DAT</para>
            /// <para>ENVI DAT—ENVI DAT format.</para>
            /// <para>ENVI DAT - ENVI DAT 格式。</para>
            /// </summary>
            [Description("ENVI DAT")]
            [GPEnumValue("ENVI")]
            _ENVI,

            /// <summary>
            /// <para>Esri BIL</para>
            /// <para>Esri BIL—Esri BIL format.</para>
            /// <para>Esri BIL - Esri BIL 格式。</para>
            /// </summary>
            [Description("Esri BIL")]
            [GPEnumValue("Esri BIL")]
            _Esri_BIL,

            /// <summary>
            /// <para>Esri BIP</para>
            /// <para>Esri BIP—Esri BIP format.</para>
            /// <para>Esri BIP - Esri BIP 格式。</para>
            /// </summary>
            [Description("Esri BIP")]
            [GPEnumValue("Esri BIP")]
            _Esri_BIP,

            /// <summary>
            /// <para>Esri BSQ</para>
            /// <para>Esri BSQ—Esri BSQ format.</para>
            /// <para>Esri BSQ - Esri BSQ 格式。</para>
            /// </summary>
            [Description("Esri BSQ")]
            [GPEnumValue("Esri BSQ")]
            _Esri_BSQ,

            /// <summary>
            /// <para>GIF</para>
            /// <para>GIF—GIF format.</para>
            /// <para>GIF - GIF 格式。</para>
            /// </summary>
            [Description("GIF")]
            [GPEnumValue("GIF")]
            _GIF,

            /// <summary>
            /// <para>Esri Grid</para>
            /// <para>Esri Grid—Esri Grid format.</para>
            /// <para>Esri Grid - Esri Grid 格式。</para>
            /// </summary>
            [Description("Esri Grid")]
            [GPEnumValue("GRID")]
            _GRID,

            /// <summary>
            /// <para>ERDAS IMAGINE</para>
            /// <para>ERDAS IMAGINE—ERDAS IMAGINE format.</para>
            /// <para>ERDAS IMAGINE - ERDAS IMAGINE 格式。</para>
            /// </summary>
            [Description("ERDAS IMAGINE")]
            [GPEnumValue("IMAGINE IMAGE")]
            _IMAGINE_IMAGE,

            /// <summary>
            /// <para>JPEG 2000</para>
            /// <para>JPEG 2000—JPEG 2000 format.</para>
            /// <para>JPEG 2000 - JPEG 2000 格式。</para>
            /// </summary>
            [Description("JPEG 2000")]
            [GPEnumValue("JP2")]
            _JP2,

            /// <summary>
            /// <para>JPEG</para>
            /// <para>JPEG 2000—JPEG 2000 format.</para>
            /// <para>JPEG 2000 - JPEG 2000 格式。</para>
            /// </summary>
            [Description("JPEG")]
            [GPEnumValue("JPEG")]
            _JPEG,

            /// <summary>
            /// <para>PNG</para>
            /// <para>PNG—PNG format.</para>
            /// <para>PNG - PNG 格式。</para>
            /// </summary>
            [Description("PNG")]
            [GPEnumValue("PNG")]
            _PNG,

            /// <summary>
            /// <para>Cloud raster format</para>
            /// <para>Cloud raster format—Cloud raster format.</para>
            /// <para>云栅格格式 - 云栅格格式。</para>
            /// </summary>
            [Description("Cloud raster format")]
            [GPEnumValue("CRF")]
            _CRF,

            /// <summary>
            /// <para>Meta raster format</para>
            /// <para>Meta raster format—Meta raster format.</para>
            /// <para>元栅格格式 - 元栅格格式。</para>
            /// </summary>
            [Description("Meta raster format")]
            [GPEnumValue("MRF")]
            _MRF,

        }

        /// <summary>
        /// <para>NoData Value</para>
        /// <para><xdoc>
        ///   <para>All the pixels with the specified value will be set to NoData in the output raster dataset.</para>
        ///   <para>It is recommended that you specify a NoData value if the output images will be clipped.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在输出栅格数据集中，所有具有指定值的像素都将设置为 NoData。</para>
        ///   <para>如果要剪裁输出图像，建议您指定 NoData 值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("NoData Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _nodata_value { get; set; } = null;


        /// <summary>
        /// <para>Clip Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the output extent of the raster datasets. If you choose an extent or feature class that covers an area larger than the raster data, the output will have the larger extent.</para>
        ///   <bulletList>
        ///     <bullet_item>No clipping—The output will not be clipped. This is the default.</bullet_item><para/>
        ///     <bullet_item>Clip to extent—An extent will be used to clip the output.</bullet_item><para/>
        ///     <bullet_item>Clip to feature class—A feature class extent will be used to clip the output.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定栅格数据集的输出范围。如果选择覆盖面积大于栅格数据的范围或要素类，则输出的范围将更大。</para>
        ///   <bulletList>
        ///     <bullet_item>无削波 - 输出不会被削波。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>裁剪到范围 - 范围将用于裁剪输出。</bullet_item><para/>
        ///     <bullet_item>裁剪到要素类 - 要素类范围将用于裁剪输出。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clip Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _clip_type_value _clip_type { get; set; } = _clip_type_value._NONE;

        public enum _clip_type_value
        {
            /// <summary>
            /// <para>No clipping</para>
            /// <para>No clipping—The output will not be clipped. This is the default.</para>
            /// <para>无削波 - 输出不会被削波。这是默认设置。</para>
            /// </summary>
            [Description("No clipping")]
            [GPEnumValue("NONE")]
            _NONE,

            /// <summary>
            /// <para>Clip to extent</para>
            /// <para>Clip to extent—An extent will be used to clip the output.</para>
            /// <para>裁剪到范围 - 范围将用于裁剪输出。</para>
            /// </summary>
            [Description("Clip to extent")]
            [GPEnumValue("EXTENT")]
            _EXTENT,

            /// <summary>
            /// <para>Clip to feature class</para>
            /// <para>Clip to feature class—A feature class extent will be used to clip the output.</para>
            /// <para>裁剪到要素类 - 要素类范围将用于裁剪输出。</para>
            /// </summary>
            [Description("Clip to feature class")]
            [GPEnumValue("FEATURE_CLASS")]
            _FEATURE_CLASS,

        }

        /// <summary>
        /// <para>Clipping Template</para>
        /// <para><xdoc>
        ///   <para>A feature class or a bounding box to limit the extent.</para>
        ///   <bulletList>
        ///     <bullet_item>Default—The extent will be based on the maximum extent of all participating inputs. This is the default.</bullet_item><para/>
        ///     <bullet_item>Current Display Extent—The extent is equal to the data frame or visible display. The option is not available when there is no active map.</bullet_item><para/>
        ///     <bullet_item>As Specified Below—The extent will be based on the minimum and maximum extent values specified.</bullet_item><para/>
        ///     <bullet_item>Browse—The extent will be based on an existing dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于限制范围的要素类或边界框。</para>
        ///   <bulletList>
        ///     <bullet_item>默认值 - 范围将基于所有参与输入的最大范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>当前显示范围 - 范围等于数据框或可见显示。当没有活动地图时，该选项不可用。</bullet_item><para/>
        ///     <bullet_item>如下所述 - 范围将基于指定的最小和最大范围值。</bullet_item><para/>
        ///     <bullet_item>浏览 - 范围将基于现有数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clipping Template")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _template_dataset { get; set; } = null;


        /// <summary>
        /// <para>Cell Size</para>
        /// <para><xdoc>
        ///   <para>The horizontal (x) and vertical (y) dimensions of the output cells.</para>
        ///   <para>If not specified, the spatial resolution of the input will be used.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出单元格的水平 （x） 和垂直 （y） 尺寸。</para>
        ///   <para>如果未指定，则将使用输入的空间分辨率。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Cell Size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _cell_size { get; set; } = null;


        /// <summary>
        /// <para>Updated Output Folder</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Output Folder")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_out_folder { get; set; }


        public ExportMosaicDatasetItems SetEnv(object compression = null, object geographicTransformations = null, object nodata = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object pyramid = null, object rasterStatistics = null, object resamplingMethod = null, object snapRaster = null, double[] tileSize = null)
        {
            base.SetEnv(compression: compression, geographicTransformations: geographicTransformations, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, pyramid: pyramid, rasterStatistics: rasterStatistics, resamplingMethod: resamplingMethod, snapRaster: snapRaster, tileSize: tileSize);
            return this;
        }

    }

}